package jonggyuni.basic;

public class J15_Interface {

	public static void main(String[] args) {
		//J15SungJukService sjsrv = new J15SungJukService();
		//인터페이스는 new 연산자를 통해 객체로 만들 수 없음
		//반드시 이것을 상속(구현)한 클래스를 통해 객체로 생성할 수 있음
		
		J15SungJukServiceImpl sjsrv = new J15SungJukServiceImpl();
		//성적 처리에 필요한 기능(총점, 평균, 학점)들을 
		//인터페이스로 분리해서 추상메서드로 정의하고 그것을 구현implements해서 클래스로 작성
		//J15SungJukService(인터페이스)
		//         ->J15SungJukServiceImpl(구현클래스)
		J15SungJukVO sj = new J15SungJukVO("지현", 98, 87, 54);
		//값을 저장하는 클래스 선언 및 초기화
		
		
		sj.setTot(sjsrv.getTotal(sj));
		sj.setAvg(sjsrv.getAverage(sj));
		sj.setGrd(sjsrv.getGrd(sj));
		// 총점, 평균, 학점 계산 후 각 변수에 값 저장
		
		System.out.println(sj.toString());
		
		
	}//main

}//class


//인터페이스 정의
interface J15SungJukService{
	//인터페이스가 제공할 메서드 정의
	//메서드는 서명까지만 작성
	//이러한 메서드를 추상메서드라 함
	//int getTotal(int kor, int eng, int math);
	int getTotal( J15SungJukVO sj);
	double getAverage(J15SungJukVO sj);
	char getGrd(J15SungJukVO sj);
	
}
//인터페이스를 구현한 클래스 작성(~Impl)
class J15SungJukServiceImpl implements J15SungJukService{

	@Override
	public int getTotal(J15SungJukVO sj) {
		return sj.getKor() + sj.getEng() +sj.getMath();
	}

	@Override
	public double getAverage(J15SungJukVO sj) {
		double avg = (double)(getTotal(sj)/3);
		return avg;
	}

	@Override
	public char getGrd(J15SungJukVO sj) {
		char grd='가';
		switch((int)(getAverage(sj)/10)){
		case 10: case 9: grd = '수';	 break;
		case 8:			 grd = '우';	break;
		case 7:          grd = '미';	break;
		case 6:          grd = '양';	break;
		}
		return grd;
	}
	
}


class J15SungJukVO{
	private String name;
	private int kor;
	private int eng;
	private int math;

	private int tot;
	private double avg;
	private char grd;
	
	public J15SungJukVO() {	}

	public J15SungJukVO(String name, int kor, int eng, int math) {
		super();
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}

	public String getName() {
		return name;
	}

/*	public void setName(String name) {
		this.name = name;
	}*/

	public int getKor() {
		return kor;
	}

/*	public void setKor(int kor) {
		this.kor = kor;
	}
*/
	public int getEng() {
		return eng;
	}

/*	public void setEng(int eng) {
		this.eng = eng;
	}*/

	public int getMath() {
		return math;
	}

/*	public void setMath(int math) {
		this.math = math;
	}*/

	public int getTot() {
		return tot;
	}

	public void setTot(int tot) {
		this.tot = tot;
	}

	public double getAvg() {
		return avg;
	}

	public void setAvg(double avg) {
		this.avg = avg;
	}

	public char getGrd() {
		return grd;
	}

	public void setGrd(char grd) {
		this.grd = grd;
	}

	@Override
	public String toString() {
		return "J15SungJukVO [name=" + name + ", kor=" + kor + ", eng=" + eng
				+ ", math=" + math + ", tot=" + tot + ", avg=" + avg + ", grd="
				+ grd + "]";
	}
	
	
	
	
}